import axios from 'axios'
import { serverURL, getToken } from './tools'
import nProgress from 'nprogress'
import 'nprogress/nprogress.css'
// 创建一个自定义的 Axios 实例
const instance = axios.create({
  baseURL: serverURL,
  timeout: 5000
})
// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 判断是否有token
    if (getToken()) {
      // 如果有token，将token添加到请求头中
      config.headers.Authorization = getToken()
    }
    // 启动loading
    nProgress.start()
    return config
  },
  (err) => {
    return Promise.reject(err)
  }
)
// 响应拦截器
instance.interceptors.response.use(
  (res) => {
    // 关闭loading
    nProgress.done()
    return res
  },
  (err) => {
    nProgress.done()
    return Promise.reject(err)
  }
)
// 封装请求
export const get = (url, params, config = {}) => {
  // 合并默认配置和传入的配置
  const requestConfig = {
    params,
    ...config // 这里会覆盖默认配置中的同名属性
  }

  // 发送请求并返回数据
  return instance.get(url, requestConfig).then((res) => res.data)
}
export const post = (url, data, config = {}) => {
  // 合并默认配置和传入的配置
  const requestConfig = {
    ...config, // 这里会覆盖默认配置中的同名属性
    data
  }

  // 发送请求并返回数据
  return instance
    .post(url, requestConfig.data, requestConfig)
    .then((res) => res.data)
}

export const put = (url, data, config = {}) => {
  // 合并默认配置和传入的配置
  const requestConfig = {
    ...config, // 这里会覆盖默认配置中的同名属性
    data
  }
  return instance
    .put(url, requestConfig.data, requestConfig)
    .then((res) => res.data)
}

export const del = (url, params, config = {}) => {
  // 合并默认配置和传入的配置
  const requestConfig = {
    params,
    ...config // 这里会覆盖默认配置中的同名属性
  }
  return instance.delete(url, requestConfig).then((res) => res.data)
}
